package com.tbit.uqbike.webmanager.dao.log;

import com.baomidou.dynamic.datasource.annotation.DS;
import com.tbit.config.datasource.DataSource;
import com.tbit.uqbike.object.pojo.Recharge;
import com.tbit.uqbike.object.pojo.RefundOpeLog;
import com.tbit.uqbike.object.pojo.StatPark;
import com.tbit.uqbike.object.pojo.UserRefundLog;
import com.tbit.uqbike.object.pojo.dto.CommonDTO;
import com.tbit.uqbike.object.pojo.statistics.BrandSerialDaySta;
import com.tbit.uqbike.object.pojo.statistics.MonthDateType;
import com.tbit.uqbike.object.pojo.vo.UserRefundLogVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 退款日志Mapper接口
 *
 * @author jing
 * @date 2021-05-26
 */
@DS(DataSource.LOG)
public interface UserRefundLogDao {

    /**
     * 查询退款日志列表
     *
     * @param userRefundLog 退款日志
     * @return 退款日志集合
     */
    public List<UserRefundLog> selectUserRefundLogList(UserRefundLog userRefundLog);

    /**
     * 获取指定订单的退款总单数和总金额
     *
     * @param recharge
     * @return 结果
     */
    public StatPark selectByOrderNO(Recharge recharge);

    /**
     * 获取指定订单的退款总单数和总金额
     *
     * @param recharge
     * @return 结果
     */
    public StatPark selectByOrderNOAndId(Recharge recharge);

    /**
     * 新增退款日志
     *
     * @param userRefundLog 退款日志
     * @return 结果
     */
    public int insertUserRefundLog(UserRefundLog userRefundLog);

    /**
     * 修改退款日志
     *
     * @param userRefundLog 退款日志
     * @return 结果
     */
    public int updateUserRefundLog(UserRefundLog userRefundLog);

    /**
     * 删除退款日志
     *
     * @param accountId 退款日志ID
     * @return 结果
     */
    public int deleteUserRefundLogById(Integer accountId);

    /**
     * 批量删除退款日志
     *
     * @param accountIds 需要删除的数据ID
     * @return 结果
     */
    public int deleteUserRefundLogByIds(Integer[] accountIds);


    /**
     * 查询时间的退款记录
     *
     * @param params 参数个数
     * @return {@link BrandSerialDaySta}
     */
    BrandSerialDaySta groupType(Map<String, Object> params);

    /**
     * 获取用户余额退款的记录
     *
     * @param map 地图
     * @return {@link List}<{@link RefundOpeLog}>
     */
    CommonDTO getRechargeRefundMoney(Map<String, Object> map);

    /**
     * 查询时间内的退款记录并根据日期分组
     *
     * @param params 参数个数
     * @return {@link List}<{@link Map}<{@link String}, {@link Object}>>
     */
    CommonDTO getRefundByTime(Map<String, Object> params);

    /**
     * 获取退款记录，按支付时间筛选，按支付时间分月
     *
     * @param map 地图
     * @return {@link List}<{@link MonthDateType}>
     */
    List<MonthDateType> getCardRefundByDate(Map<String, Object> map);

    /**
     * 导出退款记录
     *
     * @param params 参数个数
     * @return {@link List}<{@link RefundOpeLog}>
     */
    List<UserRefundLog> excelRefundLog(Map<String, Object> params);

    /**
     * 获取退款收益
     *
     * @param params 参数个数
     * @return {@link CommonDTO}
     */
    CommonDTO getRefundIncome(Map<String, Object> params);

    /**
     * 根据商户订单号查询退款日志
     *
     * @param orderNO
     * @return
     */
    List<UserRefundLogVO> queryUserRefundLogByOrderNO(@Param("orderNO") String orderNO);
}
